function [fShift, time, dopplerInfo, filePath] = cal_doppler(sat, gs, fs, pl, outputFolder)
% cal_doppler 绘制多普勒频移与变化率可视化，并将图像保存到指定路径
%   输入：
%     sat         - 卫星对象
%     gs          - 地面站对象
%     fs          - 频率（赫兹）
%     pl          - 绘图模式（1:只画多普勒频移；2:画多普勒频移+变化率）
%     outputFolder- 字符串，图像输出目录（由 Python 端传入）
%   输出：
%     fShift      - 多普勒频移数据
%     time        - 时间向量
%     dopplerInfo - 多普勒信息结构体
%     filePath    - 图像保存路径

    if nargin < 4
        pl = 1; % 如果没有提供pl参数，则默认绘图模式为1
    end

    [fShift, time, dopplerInfo] = dopplershift(sat,gs,Frequency=fs);

    fig = figure('Visible', 'off');

    if pl == 1
        plot(time,fShift(1,:)/1e3)                        % Plot in kHz
        xlim([time(1) time(end)])
        title("First Satellite's Doppler Shift vs. Time")
        xlabel("Simulation Time")
        ylabel("Doppler Shift (kHz)")
        grid on
    elseif pl == 2
        subplot(2,1,1)
        plot(time,fShift(1,:)/1e3)                        % Plot in kHz
        xlim([time(1) time(end)])
        title("First Satellite's Doppler Shift vs. Time")
        xlabel("Simulation Time")
        ylabel("Doppler Shift (kHz)")
        grid on

        subplot(2,1,2)
        plot(time(1:end-1),dopplerInfo.DopplerRate(1,:))  % Plot in Hz/s
        xlim([time(1) time(end-1)])
        title("First Satellite's Doppler Rate vs. Time")
        xlabel("Simulation Time")
        ylabel("Doppler Rate (Hz/s)")
        grid on
    end

    % 构造文件名并保存图像
    filename = fullfile(outputFolder, ...
        sprintf('doppler_plot_%s_sat%d.png', gs.Name, sat.ID));

    saveas(fig, filename);
    close(fig);
    filePath = filename;

end